package edu.nf.project.services.process;

import edu.nf.project.entitys.entity.storeOperation.convention.operate.Board;
import edu.nf.project.entitys.entity.storeOperation.convention.operate.CustomerOrder;
import edu.nf.project.entitys.entity.storeOperation.convention.operate.CustomerOrderItem;

import java.util.List;

/**
 * @author CSY
 * @date 2025 - 06 - 10
 * 订单处理器 - 用于分离出职责,实现单一职责原则
 * 1、订单主表的添加/更新
 * 2、订单项表的添加/更新
 * 3、下单后优惠券的删除
 * 4、下单后餐桌状态更新
 */
public interface OrderProcess {
    /**
     * 订单主表的添加/更新
     * 判断订单编号是否存在来分别进行添加/更新操作
     * @param order 订单主表
     */
    void processOrder(CustomerOrder order);

    /**
     * 订单项表的添加/更新
     * 根据传递过来的购物车订单项和数据库的所有订单项来进行判断
     * 判断购物车中的订单项是否在数据库中已经存在
     * 如果已经存在则是修改数据库的订单项的数量
     * @param orderItems 购物车订单项
     * @param orderItemsAll 数据库所有订单项
     */
    void processOrderItems(List<CustomerOrderItem> orderItems,List<CustomerOrderItem> orderItemsAll,Integer orderId);

    /**
     * 下单后优惠券的删除
     * 根据顾客编号和优惠券编号进行删除
     * @param couponId 优惠券编号
     * @param uId 账户编号
     */
    void handlerCoupon(Integer couponId,Integer uId);

    /**
     * 下单后对餐桌状态进行更新
     * @param boardId
     */
    void handlerBoardStatus(Integer boardId);
}
